﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using QuizAppMvc2.Models;
using QuizAppMvc2.Bll;

namespace QuizAppMvc2.Controllers
{
    public class SetupController : Controller
    {
        quizdbEntities _db = new quizdbEntities();

        // Tela para criar uma prova
        public ActionResult Create()
        {
            SetupModels setup = new SetupModels();

            setup.Quantidade = 10;

            setup.Algoritmos = new List<Algoritmo>();
            setup.Algoritmos.Add(new Algoritmo() { id = 1, nome = "Aleatório" });
            setup.Algoritmos.Add(new Algoritmo() { id = 2, nome = "Mais erradas" });
            setup.Algoritmos.Add(new Algoritmo() { id = 3, nome = "Menos exibidas" });
            setup.Algoritmos.Add(new Algoritmo() { id = 4, nome = "Mais erradas e exibidas" });

            setup.materias = _db.Materias.ToList<Materia>();

            return View(setup);
        }


        // Exibe a prova
        [HttpPost]
        public ActionResult Avaliation(SetupModels setupModel)
        {
            try
            {
                AvaliacaoModels avaliation = new AvaliacaoModels();
                //_db.ContextOptions.LazyLoadingEnabled

                avaliation.questoes = new List<ProvaQuestao>();

                int[] ids = Singleton.Instance.GetIndices(setupModel.Quantidade, setupModel.algoritmo, setupModel.materiaid, setupModel.topicoid, setupModel.subtopicoid);

                foreach (int inteiro in ids)
                {

                    Questao questao = _db.Questaos.Where(m => m.idQuestao == inteiro).First();

                    ProvaQuestao provaQuestao = new ProvaQuestao()
                    {
                        Questao = questao
                    };

                    avaliation.questoes.Add(provaQuestao);
                }



                //foreach (QuestaoSimplesView q in materiaToEdid)
                //{
                //    av.questoes.Add(new QuestaoModel() { idquestao = q.idQuestao, texto = q.Texto });
                //}
                return View(avaliation);
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Finish(AvaliacaoModels av)
        {
            ResumoModels resumo = new ResumoModels();

            Wrapper wrapper = new Wrapper();

            resumo = wrapper.ProcessTest(av);

            return View(resumo);
        }


        public ActionResult abc(int year)
        {
            var v = _db.Topicoes.Where(x => x.idMateria == year);
            //var v = db.Topicoes;

            return Json(
                v.Select(x => new { value = x.idTopico, novo = x.Nome }),
                JsonRequestBehavior.AllowGet
            );
        }

        public ActionResult Topicos(int idMateria)
        {
            quizdbEntities db = new quizdbEntities();
            var v = _db.Topicoes.Where(e => e.idMateria == idMateria);
            return Json(v, JsonRequestBehavior.AllowGet);
            //return Json(
            //    Enumerable.Range(1, 12).Select(x => new { value = x, text = x }),
            //    JsonRequestBehavior.AllowGet
            //);
        }


        public ActionResult Subtopicos(int year)
        {

            var v = _db.SubTopicoes.Where(x => x.idTopico == year);
            //var v = db.Topicoes;

            return Json(
                v.Select(x => new { value = x.idSubTopico, novo = x.Nome }),
                JsonRequestBehavior.AllowGet
            );
        }


        //public ActionResult Index(SetupModels setupModel)
        //{
        //    AvaliacaoModels avaliacao = new AvaliacaoModels();

        //    avaliacao.questoes = new List<Questao>();

        //    var questoes = (from m in _db.Questaos
        //                         where m.idMateria == setupModel.materiaid
        //                         select m);

        //    foreach (Questao q in questoes)
        //    {
        //        avaliacao.questoes.Add(q);
        //    }


        //    return View(avaliacao);
        //}


    }
}
